home *** CD-ROM | disk | FTP | other *** search
- {
- >I'm new to Pascal and Turbo Vision and I am writing a program that
- >needs pop-up menus. I've tried several times to use TMenuBox objects
- >but have had no luck at all. Could someone please point me in the
- >right direction? I am looking for a good Turbo Vision tutorial or a
- >short example using TMEnuBox with submenus from the first pop-up menu.
-
- You can create popup menus using an instance of the TMenuPopup class.
- For a complete reference of this class have a look at the online help
- because the (german) manual doesn't describes TMenuPopup.
-
- Use the following procedure to execute a popup menu:
- }
- procedure ExecutePopupMenu (At:TPoint; PopupMenu:PMenuPopup);
- { shows the "PopupMenu" at the position "At" }
- var
- Bounds : TRect;
- D : Integer;
- begin
- if Application^.ValidView(PopupMenu) <> nil then
- begin
- D:=0;
- Inc(At.Y);
- Application^.GetBounds(Bounds);
- if At.Y + PopupMenu^.Size.Y > Bounds.B.Y then
- begin
- Dec(At.Y, PopupMenu^.Size.Y+1);
- if At.Y < Bounds.A.Y then
- begin
- At.Y:=Bounds.A.Y;
- Inc(At.X); D:=1;
- end;
- end;
- if At.X + PopupMenu^.Size.X > Bounds.B.X then
- Dec(At.X, PopupMenu^.Size.X+D);
- Application^.MakeLocal(At, At);
- PopupMenu^.MoveTo(At.X, At.Y);
- Application^.Insert(PopupMenu);
- Message(PopupMenu, evBroadcast, cmCommandSetChanged, nil);
- Message(PopupMenu, evCommand, cmMenu, nil);
- DisposeMenu(PopupMenu^.Menu);
- Dispose(PopupMenu, Done);
- end;
- end;
-
- Before executing the popup menu this procedure is doing some
- calculations to guarantee that regardless of the parameter "At" the
- popup menu is always showed within the current screen boundaries of
- "Application".
-
- - Kai
-
-